package com.cqvip.innocence.common.util.map;

import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * map工具类
 * 其中包含一些可供处理map的方法
 * @author 01
 * @date 2022-08-18 15:05
 */
public class MapUtil {

    /**
     * 合并两个具有相同key的map list
     *
     * @param m1       list
     * @param mergeKey 按哪个key来合并
     * @return {@link List <  Map < String, Object>>}
     * @throws
     * @author 01
     * @date 2022/7/5 15:21
     */
    public static List<Map<String, String>> merge(List<Map<String, String>> m1, String mergeKey) {
        Set<String> set = new HashSet<>();
        return m1.stream()
                .filter(map -> map.get(mergeKey) != null)
                .collect(Collectors.groupingBy(o -> {
                    //暂存所有key
                    set.addAll(o.keySet());
                    //按mergeKey分组
                    return o.get(mergeKey).toString();
                }))
                .entrySet().stream().map(o -> {
                    //合并
                    Map<String, String> map = o.getValue().stream().flatMap(m -> {
                        return m.entrySet().stream();
                    }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> b.toString()));
                    set.stream().forEach(k -> {
                        //为没有的key赋值0
                        if (!map.containsKey(k)) {
                            map.put(k, "0");
                        }
                    });
                    return map;
                }).collect(Collectors.toList());
    }
}
